package com.example.interceptor;

import com.example.utils.JwtSuperUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class JwtInterceptor implements HandlerInterceptor {

    // 请求前执行，返回false会中断请求
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        /**
         * 预检请求
         * 预检请求是浏览器为保证安全性，在发送**某些跨域请求之前，先发送一个 HTTP OPTIONS 请求**，向服务器“询问”这个接口是否允许这样跨域。
         * 🔥 如果服务器回复“允许”，才会继续真正的业务请求。
         * 预检请求是浏览器自动发送的 OPTIONS 请求，目的是验证跨域是否合法。Java后端必须允许OPTIONS方法并返回正确的CORS响应头，才能让浏览器放行后续的真实请求。
         */
//        if (request.getMethod().equals("OPTIONS")) {
//            return true;
//        }
        String authorization = request.getHeader("Authorization");
        if (authorization == null || !authorization.startsWith("Bearer ")) {
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
            return false;
        }
        String token = authorization.replace("Bearer ", "");
        if (!JwtSuperUtil.validateToken(token)) {
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
            return false;
        }
        return true;
    }

}
